package com.cpr.ams.service;


import com.cpr.ams.bean.BaseUser;
import com.cpr.ams.bean.extend.BaseUserExtend;
import com.cpr.ams.bean.extend.Statistical;
import com.cpr.ams.exception.AmsException;
import com.cpr.ams.vm.UserVM;

import java.util.List;

/**
 * @Description: 用户接口
 * @Author: GX Cui
 * @Date 10:40 下午 2021/4/10
 */

public interface IBaseUserService {
    

    /**
     * @Description: 登录
     * @Author: GX Cui
     * @Date 11:24 下午 2021/4/11
     * @Param: [userVM]
     * @return: void
     */
    BaseUser login(UserVM userVM) throws AmsException;

    /**
     * @Description: 通过id查询
     * @Author: GX Cui
     * @Date 11:24 下午 2021/4/11
     * @Param: [id]
     * @return: com.cpr.ams.bean.extend.BaseUserExtend
     */
    BaseUserExtend findById(int id);

    /**
     * @Description: 查询所有
     * @Author: GX Cui
     * @Date 11:25 下午 2021/4/11
     * @Param: []
     * @return: java.util.List<com.cpr.ams.bean.BaseUser>
     */
    List<BaseUser> findAll();

    /**
     * @Description: 级联查询所有
     * @Author: GX Cui
     * @Date 11:26 下午 2021/4/11
     * @Param: []
     * @return: java.util.List<com.cpr.ams.bean.extend.BaseUserExtend>
     */
    List<BaseUserExtend> cascadeRoleFindAll();

    /**
     * @Description:  保存或更新
     * @Param: [baseUser]
     * @return: void
     * @Author: charles
     * @Date: 2019-11-16
     */
    int saveOrUpdate(BaseUser baseUser) throws AmsException;

    /**
     * @Description: 更新状态
     * @Author: GX Cui
     * @Date 11:26 下午 2021/4/11
     * @Param: [status]
     * @return: void
     */
    void changeStatus(int id, String status) throws AmsException;

    /**
     * @Description: 通过id删除
     * @Author: GX Cui
     * @Date 11:23 下午 2021/4/11
     * @Param: [id]
     * @return: void
     */
    void deleteById(int id) throws AmsException;

    /**
     * @Description: 设置角色
     * @Author: GX Cui
     * @Date 11:22 下午 2021/4/11
     * @Param [id, roles]
     * @Return void
     */
    void setRoles(int id, List<Integer> roles);

    /**
     * @Description: 根据角色id查询不同角色的用户
     * @Author: GX Cui
     * @Date 5:53 下午 2021/4/14
     * @Param [roleId]
     * @Return java.util.List<com.cpr.ams.bean.BaseUser>
     */
    List<BaseUser> findByRoleId(int roleId);

    /**
     * @Description: 获取数据统计对象
     * @Author: GX Cui
     * @Date 7:26 下午 2021/4/26
     * @Return com.cpr.ams.bean.extend.Statistical
     */
    Statistical getStatisticalData();

}
